package org.learn.test;

public class Maze {
    public static void main(String[] args) {
        //第一步先创建迷宫，用二维数组表示；0表示可以走的；1表示障碍物。
        int[][] map = new int[8][7];
        //将最上面的一行和最下面的一行，全部设置为1；
        for (int i = 0; i < 7; i++) {
            map[0][i] = 1;
            map[7][i] = 1;
        }
        //将最右边的一列和最左边的一列，全部设置为1
        for (int i = 0; i < 6; i++) {
            map[i][0] = 1;
            map[i][6] = 1;
        }
        //单独设置其他障碍物
        map[3][1] = 1;
        map[3][2] = 1;
        //输出当前地图
        System.out.println("===当前地图===");
        for (int i = 0; i < map.length; i++) {
            for (int j = 0; j < map[i].length; j++) {
                System.out.print(map[i][j] + " ");
            }
            System.out.println();
        }
        T1 t1 = new T1();
        t1.findWay(map,1,1);

        System.out.println("===找路的情况===");
        for (int i = 0; i < map.length; i++) {
            for (int j = 0; j < map[i].length; j++) {
                System.out.print(map[i][j] + " ");
            }
            System.out.println();
        }
    }
}

     class T1 {
        //使用递归方法解决老鼠出迷宫
        //2表示可以走，3表示走过是死路；
        public boolean findWay(int[][] map, int i, int j) {
            if (map[6][5] == 2) {//说明路已经找到
                return true;
            } else {
                if (map[i][j] == 0) {
                    map[i][j] = 2;
                    if (findWay(map, i + 1, j)) {//下
                        return true;
                    } else if (findWay(map, i, j + 1)) {//右边
                        return true;
                    } else if (findWay(map, i - 1, j)) {//上
                        return true;
                    } else if (findWay(map, i, j - 1)) {//左
                        return true;
                    }else {
                        map[i][j] = 3;
                        return false;
                    }
                }else{
                    return false;
                }
            }
        }
    }

